/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package GUI;

import DB.DBmanager;
import POJOS.Album;
import javax.swing.JOptionPane;
import GUI.ListAlbumGroupForm;
import POJOS.MusicGroup;
import POJOS.MusicProductionCompany;
import javafx.util.Duration;
import javax.swing.table.DefaultTableModel;
import POJOS.Song;
import com.sun.glass.events.KeyEvent;
import java.util.ArrayList;


import java.util.Date;
import java.util.List;
import javax.swing.ListSelectionModel;
/**
 *
 * @author jim
 */
public class NewOrModifyAlbumGroupForm extends javax.swing.JFrame {
    Album album;
    boolean modify;
    int confirm;
    int selectRow;
    MusicProductionCompany mpc;
    MusicGroup mg;
    Song song;
    /**
     * Creates new form NewOrModifyAlbumGroupForm
     */
    public NewOrModifyAlbumGroupForm() {
        initComponents();
        setLocationRelativeTo(null);
        modify = false;
        jComboBoxEtairia.setSelectedItem(null);
        jComboBoxGroup.setSelectedItem(null);
        songList.clear();
        checkButtons();
    }

    //Τροποποίηση άλμπουμ
     public NewOrModifyAlbumGroupForm(Album al) {
        initComponents();
        checkButtons();
        modify= true;
        songTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
         
        album = al;
        //Ενημερώνει τους τίτλους του GUI
        setTitle("ΤΡΟΠΟΠΟΙΗΣΗ ΑΛΜΠΟΥΜ");
        jLabel1.setText("Παρακαλώ τροποποιείστε τα στοιχεία του άλμπουμ:");
        cancel.setText("ΑΚΥΡΩΣΗ");
         
        //Δίνει τιμές στα JText από την επιλεγμένη γραμμή του άλμπουμ
        titleJT.setText(album.getTitle());
        typeJT.setText(album.getTypeAlbum());
        tralbumJT.setText(String.valueOf(album.getDiskNumber()));
        jComboBoxEtairia.setSelectedItem(album.getIdMusicProductionCompany().getNameMpc());
        jComboBoxGroup.setSelectedItem(album.getIdMusicGroup().getNameMusicGroup());
        dateJT.setDate(album.getReleaseDate());
         
        //Καθαρίζει τη songList
        songList.clear();

        //Ενημερώνει τη λίστα τραγουδιών με βάση το επιλεγμένο άλμπουμ
        RadioStationPUEntityManager.getTransaction().begin();
        album = RadioStationPUEntityManager.merge(album);
        RadioStationPUEntityManager.getTransaction().commit();
         
        for (Song s : album.getSongCollection()){
            NewOrModifyAlbumGroupForm.songList.add(s);
        }
    }
     
     private void checkButtons(){
        selectRow= songTable.getSelectedRow();
        delete.setEnabled(selectRow>=0);
     }
        
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {
        bindingGroup = new org.jdesktop.beansbinding.BindingGroup();

        RadioStationPUEntityManager = java.beans.Beans.isDesignTime() ? null : javax.persistence.Persistence.createEntityManagerFactory("RadioStationPU").createEntityManager();
        musicProductionCompanyQuery = java.beans.Beans.isDesignTime() ? null : RadioStationPUEntityManager.createQuery("SELECT m.nameMpc FROM MusicProductionCompany m");
        musicProductionCompanyList = java.beans.Beans.isDesignTime() ? java.util.Collections.emptyList() : musicProductionCompanyQuery.getResultList();
        musicGroupQuery = java.beans.Beans.isDesignTime() ? null : RadioStationPUEntityManager.createQuery("SELECT m.nameMusicGroup FROM MusicGroup m");
        musicGroupList = java.beans.Beans.isDesignTime() ? java.util.Collections.emptyList() : org.jdesktop.observablecollections.ObservableCollections.observableList(musicGroupQuery.getResultList());
        songQuery = java.beans.Beans.isDesignTime() ? null : RadioStationPUEntityManager.createQuery("SELECT s FROM Song s");
        songList = java.beans.Beans.isDesignTime() ? java.util.Collections.emptyList() : org.jdesktop.observablecollections.ObservableCollections.observableList(songQuery.getResultList());
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        jLabel7 = new javax.swing.JLabel();
        jLabel8 = new javax.swing.JLabel();
        titleJT = new javax.swing.JTextField();
        typeJT = new javax.swing.JTextField();
        tralbumJT = new javax.swing.JTextField();
        jComboBoxEtairia = new javax.swing.JComboBox();
        dateJT = new org.jdesktop.swingx.JXDatePicker();
        add = new javax.swing.JButton();
        delete = new javax.swing.JButton();
        jSeparator1 = new javax.swing.JSeparator();
        cancel = new javax.swing.JButton();
        save = new javax.swing.JButton();
        jComboBoxGroup = new javax.swing.JComboBox();
        jScrollPane1 = new javax.swing.JScrollPane();
        songTable = new javax.swing.JTable();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("ΕΙΣΑΓΩΓΗ ΑΛΜΠΟΥΜ");
        addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                formMouseClicked(evt);
            }
        });

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLabel1.setForeground(new java.awt.Color(204, 0, 204));
        jLabel1.setText("Εισάγετε τα στοιχεία του νέου άλμπουμ συγκροτήματος:");

        jLabel2.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        jLabel2.setText("Τίτλος:");

        jLabel3.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        jLabel3.setText("Τύπος Άλμπουμ:");

        jLabel4.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        jLabel4.setText("Αριθμός Δίσκου:");

        jLabel5.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        jLabel5.setText("Εταιρία Παραγωγής:");

        jLabel6.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        jLabel6.setText("Συγκρότημα:");

        jLabel7.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        jLabel7.setText("Ημερομηνία Κυκλοφορίας:");

        jLabel8.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLabel8.setText("Πίνακας Τραγουδιών");

        titleJT.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N

        typeJT.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N

        tralbumJT.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        tralbumJT.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                tralbumJTKeyTyped(evt);
            }
        });

        jComboBoxEtairia.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N

        org.jdesktop.swingbinding.JComboBoxBinding jComboBoxBinding = org.jdesktop.swingbinding.SwingBindings.createJComboBoxBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, musicProductionCompanyList, jComboBoxEtairia);
        bindingGroup.addBinding(jComboBoxBinding);

        add.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        add.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Image/1424870976_add.png"))); // NOI18N
        add.setText("ΕΙΣΑΓΩΓΗ");
        add.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                addActionPerformed(evt);
            }
        });

        delete.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        delete.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Image/Button-delete-icon.png"))); // NOI18N
        delete.setText("ΔΙΑΓΡΦΗ");
        delete.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                deleteActionPerformed(evt);
            }
        });

        cancel.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        cancel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Image/Actions-button-cancel-icon.png"))); // NOI18N
        cancel.setText("ΕΞΟΔΟΣ");
        cancel.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cancelActionPerformed(evt);
            }
        });

        save.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        save.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Image/Save-icon.png"))); // NOI18N
        save.setText("ΑΠΟΘΗΚΕΥΣΗ");
        save.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                saveActionPerformed(evt);
            }
        });

        jComboBoxGroup.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N

        jComboBoxBinding = org.jdesktop.swingbinding.SwingBindings.createJComboBoxBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, musicGroupList, jComboBoxGroup);
        bindingGroup.addBinding(jComboBoxBinding);

        org.jdesktop.swingbinding.JTableBinding jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, songList, songTable);
        org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${title}"));
        columnBinding.setColumnName("ΤΙΤΛΟΣ");
        columnBinding.setColumnClass(String.class);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${duration}"));
        columnBinding.setColumnName("ΔΙΑΡΚΕΙΑ");
        columnBinding.setColumnClass(Float.class);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${tracknr}"));
        columnBinding.setColumnName("ΑΡΙΘΜΟΣ ΤΡΑΓΟΥΔΙΟΥ");
        columnBinding.setColumnClass(Integer.class);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${diskNumber}"));
        columnBinding.setColumnName("ΑΡΙΘΜΟΣ ΔΙΣΚΟΥ");
        columnBinding.setColumnClass(Integer.class);
        bindingGroup.addBinding(jTableBinding);
        jTableBinding.bind();
        songTable.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                songTableMouseClicked(evt);
            }
        });
        jScrollPane1.setViewportView(songTable);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addGap(0, 0, Short.MAX_VALUE)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(48, 48, 48))
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jLabel2)
                            .addComponent(jLabel3)
                            .addComponent(jLabel4)
                            .addComponent(jLabel5)
                            .addComponent(jLabel6)
                            .addComponent(jLabel7))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(titleJT)
                            .addComponent(typeJT)
                            .addComponent(tralbumJT)
                            .addComponent(dateJT, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(jComboBoxEtairia, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(jComboBoxGroup, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(213, 213, 213)
                        .addComponent(jLabel8))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(82, 82, 82)
                        .addComponent(jLabel1))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 533, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(12, Short.MAX_VALUE))
            .addGroup(layout.createSequentialGroup()
                .addGap(98, 98, 98)
                .addComponent(add)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(delete)
                .addGap(93, 93, 93))
            .addGroup(layout.createSequentialGroup()
                .addGap(37, 37, 37)
                .addComponent(save)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(cancel)
                .addGap(42, 42, 42))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(titleJT, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel3)
                    .addComponent(typeJT, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4)
                    .addComponent(tralbumJT, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel5)
                    .addComponent(jComboBoxEtairia, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel6)
                    .addComponent(jComboBoxGroup, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel7)
                    .addComponent(dateJT, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addComponent(jLabel8)
                .addGap(18, 18, 18)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 221, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(add)
                    .addComponent(delete))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 11, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(cancel)
                    .addComponent(save))
                .addContainerGap())
        );

        bindingGroup.bind();

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void addActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addActionPerformed
        // TODO add your handling code here:
        boolean con = true;
        
        //Περίπτωση τροποποίησης άλμπουμ
        if (modify ==true){
                
            //Ζητάει τα στοιχεία του νέου τραγουδιού
            String newtitle= JOptionPane.showInputDialog("Εισάγετε τον τίλτο του τραγουδιού:");
            float newduration = Float.parseFloat(JOptionPane.showInputDialog("Εισάγετε τη διάρκεια σε δευτερόλεπτα:"));
            int newtrack = Integer.parseInt(JOptionPane.showInputDialog("Εισάγετε τον αριθμό σειράς του τραγουδιιού:"));
            //Παίρνει τον αριθμό του δίσκου από το αντίστοιχο JText
            int newdisknumber = Integer.parseInt(tralbumJT.getText());
        
            album = ListAlbumGroupForm.albumList.get(ListAlbumGroupForm.albumGroupTable.convertRowIndexToModel(ListAlbumGroupForm.selectedRow));
            
            //Δημιουργεί το νέο τραγούδι
            song= new Song(0,newtitle,newduration,newtrack,newdisknumber,album);
        
            confirm = JOptionPane.showConfirmDialog(null, "Επιθυμείτε να εισάγετε το τραγούδι " + song.getTitle() + ";","",JOptionPane.OK_CANCEL_OPTION);
                if (confirm == 0){
                    
                    //Έλεγχος αν υπάρχει τραγούδι με το ίδιο όνομα στη λίστα
                for(int i=0;i<this.songList.size();i++){    
                    if (songList.get(i).getTitle().equals(newtitle)){
                        con = false;
                    }
                }
                //Έαν δεν υπάρχει προσθέτει το τραγούδι στη λίστα
                if (con){ 
                    NewOrModifyAlbumGroupForm.songList.add(songList.size(), song);
         
                    JOptionPane.showMessageDialog(null,"Το τραγούδι προστέθηκε στη λίστα!","SUCCESFUL",JOptionPane.INFORMATION_MESSAGE);
                }else{
                    JOptionPane.showMessageDialog(null, "Το τραγούδι υπάρχει ήδη στh λίστα!", "ERROR", JOptionPane.ERROR_MESSAGE);
                }
            }
                //Έαν βρισκόμαστε στη δημιουργία νέου άλμουμ
        }else { 
           
            //Πριν την εισαγωγή των τραγουδιών μας ζητάει να εισαγουμε τον αριθμό του άλμπουμ
            if ( tralbumJT.getText().isEmpty() ){
                JOptionPane.showMessageDialog(null, "Εισάγετε πρώτα τον αριθμό του Δίσκου!", "ERROR", JOptionPane.ERROR_MESSAGE);
            } else{
                
                Integer newtralbum= Integer.parseInt(tralbumJT.getText());
           
                String newtitle= JOptionPane.showInputDialog("Εισάγετε τον τίλτο του τραγουδιού:");
                float newduration = Float.parseFloat(JOptionPane.showInputDialog("Εισάγετε τη διάρκεια σε δευτερόλεπτα:"));
                int newtrack = Integer.parseInt(JOptionPane.showInputDialog("Εισάγετε τον αριθμό σειράς του τραγουδιιού:"));
                int newdisknumber = Integer.parseInt(tralbumJT.getText());
        
                //Δημιουργία τραγουδιού χωρίς σύνδεση με το άλμπουμ
                song= new Song(0,newtitle,newduration,newtrack,newdisknumber);
        
                confirm = JOptionPane.showConfirmDialog(null, "Επιθυμείτε να εισάγετε το τραγούδι " + song.getTitle() + ";","",JOptionPane.OK_CANCEL_OPTION);
                
                if (confirm == 0){
                    //Έλεγχος αν υπάρχει τραγούδι με το ίδιο όνομα στη λίστα
                    for(int i=0;i<this.songList.size();i++){    
                        if (songList.get(i).getTitle().equals(newtitle)){
                            con = false;
                        }
                    }
                    //Έαν δεν υπάρχει προσθέτει το τραγούδι στη λίστα
                    if (con){ 
                        NewOrModifyAlbumGroupForm.songList.add(songList.size(), song);
                        JOptionPane.showMessageDialog(null,"Το τραγούδι προστέθηκε στη λίστα!","SUCCESFUL",JOptionPane.INFORMATION_MESSAGE);
                    }else{
                        JOptionPane.showMessageDialog(null, "Το τραγούδι υπάρχει ήδη στη λίστα!", "ERROR", JOptionPane.ERROR_MESSAGE);
                    }
                }
            }
       }
    }//GEN-LAST:event_addActionPerformed

    private void deleteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteActionPerformed
        // TODO add your handling code here:
        //Στην πέριπτωση της τροποποίησης του άλμπουμ
        if (modify==true){
            selectRow= songTable.getSelectedRow();
            song= songList.get(songTable.convertRowIndexToModel(selectRow));
            
            confirm = JOptionPane.showConfirmDialog(null, "Επιθυμείτε να διαγράψετε το τραγούδι " + song.getTitle() + ";","",JOptionPane.OK_CANCEL_OPTION);  
            if (confirm==0){
                //Αφαιρεί το τραγούδι από τη λίστα
                songList.remove(song);
            
                JOptionPane.showMessageDialog(null,"Το τραγούδι αφαιρέθηκε από τη λίστα!","SUCCESFUL",JOptionPane.INFORMATION_MESSAGE);
            }            
            checkButtons();
        }else{
            //Στην περίπτωση της προσθήκης νέου άλμπουμ
            selectRow= songTable.getSelectedRow();
            song= songList.get(songTable.convertRowIndexToModel(selectRow));
            confirm = JOptionPane.showConfirmDialog(null, "Επιθυμείτε να διαγράψετε το τραγούδι " + song.getTitle() + ";","",JOptionPane.OK_CANCEL_OPTION);  
            if (confirm==0){
                songList.remove(song);
            
                JOptionPane.showMessageDialog(null,"Το τραγούδι αφαιρέθηκε από τη λίστα!","SUCCESFUL",JOptionPane.INFORMATION_MESSAGE);
            }            
            checkButtons();
        }
    }//GEN-LAST:event_deleteActionPerformed

    private void cancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelActionPerformed
        // TODO add your handling code here:
        dispose();
    }//GEN-LAST:event_cancelActionPerformed

    private void saveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveActionPerformed
        // TODO add your handling code here:
        //Για την αποθήκευση πρέπει να είναι όλα τα πεδία συμπληρωμένα
        if (titleJT.getText().isEmpty() || typeJT.getText().isEmpty() ||
            jComboBoxGroup.getSelectedItem().toString().isEmpty() ||
            dateJT.getDate().toString().isEmpty() || jComboBoxEtairia.getSelectedItem().toString().isEmpty()){
            JOptionPane.showMessageDialog(null, "Σμπληρώστε τα στοιχεία του άλμπουμ!", "ERROR", JOptionPane.ERROR_MESSAGE);
        } else{
            //Για την τροποποίηση του άλμπουμ
            if (modify == true){
                confirm = JOptionPane.showConfirmDialog(null, "Επιθυμείτε να αποθηκεύσετε τις αλλαγές;","",JOptionPane.OK_CANCEL_OPTION);
                
                if (confirm == 0){
                    
                    //Έλεγχος για ύπαρξη στη λίστα τουλάχιστον ενός τραγουδιού
                    if(songList.size()<1){                          
                        JOptionPane.showMessageDialog(null, "Το άλμπομ πρέπει να περιέχει τουλάχιστον ένα τραγούδι!", "ERROR", JOptionPane.ERROR_MESSAGE);
                    }else{
                        
                  //Αν υπάρχει τουλάχιστον ένα τραγούδι παίρνει τις τιμές από τα JText και τις περνάει στο άλμουμ
                    album.setTitle(titleJT.getText());
                    album.setTypeAlbum(typeJT.getText());
                    album.setDiskNumber(Integer.parseInt(tralbumJT.getText()));
                    album.setReleaseDate(dateJT.getDate());
                    
                    //Επιστροφή του Id_MusicCompany από το NameMusicCompany
                    mpc  = DB.DBmanager.identifyMusicCompanywithNameMusicCompany(jComboBoxEtairia.getSelectedItem().toString());
                    album.setIdMusicProductionCompany(mpc);
                    
                    //Επιστροφή του Id_MusicGroup από το NameMusicGroup
                    mg = DB.DBmanager.identifyMusicGroupwithNameMusicGroup(jComboBoxGroup.getSelectedItem().toString());
                    album.setIdMusicGroup(mg);
                
                    boolean deleteSong=false;
                    boolean addSong = false;   
                    
                    //Αποθήκευση των αλλαγών των στοιχείων του άλμπουμ στη ΒΔ
                    if (DB.DBmanager.ModifyAlbum(album)){
                            
                        //Διαγραφή τραγουδιών από τη ΒΔ
                        if(DB.DBmanager.deleteFromSongCollection(album, songList)){
                            deleteSong=true;
                        }
                        //Προσθήκη τραγουδιών στη βάση
                        for(Song s: songList){
                            if(DB.DBmanager.addToSongCollection(album,s)){
                                addSong=true;                            
                            }
                        }
                        //Έλεγχος για τη διαγραφή/προσθήκη των τραγουδιών στη ΒΔ
                        if(addSong & deleteSong){   
                            JOptionPane.showMessageDialog(null,"Επιτυχής τροποποίηση τραγουδιών του άλμπουμ!","SUCCESFUL",JOptionPane.INFORMATION_MESSAGE);
                        }
                        ListAlbumGroupForm.albumList.set(ListAlbumGroupForm.albumGroupTable.getSelectedRow(),album);
                        JOptionPane.showMessageDialog(null,"Επιτυχής τροποποίηση στοιχείων άλμπουμ!","SUCCESFUL",JOptionPane.INFORMATION_MESSAGE);
                            
                        dispose();
                            
                        }else{
                            JOptionPane.showMessageDialog(null, "Αποτυχία τροποποίησης άλμπουμ!", "ERROR", JOptionPane.ERROR_MESSAGE);
                        }
                    }
                }
                //Στην περίπτωση προσθήκης νέου άλμπουμ
            }else{
                confirm = JOptionPane.showConfirmDialog(null, "Επιθυμείτε να ολοκληρώσετε την καταχώρηση;","",JOptionPane.OK_CANCEL_OPTION);
                if (confirm == 0){
                    //Έλεγχος για ύπαρξη στη λίστα τουλάχιστον ενός τραγουδιού
                    if(songList.size()<1){
                        JOptionPane.showMessageDialog(null, "Το άλμπουμ πρέπει να περιέχει τουλάχιστον ένα τραγούδι!", "ERROR", JOptionPane.ERROR_MESSAGE);
                    }else{   
                        //Παίρνει τις τιμές από τα JText και τις παιρνάει στο άλμπουμ
                        String newTitle= titleJT.getText();
                        String newType = typeJT.getText();
                        Integer newtralbum= Integer.parseInt(tralbumJT.getText());
                        mpc  = DB.DBmanager.identifyMusicCompanywithNameMusicCompany(jComboBoxEtairia.getSelectedItem().toString());
                        mg = DB.DBmanager.identifyMusicGroupwithNameMusicGroup(jComboBoxGroup.getSelectedItem().toString());
                        Date newDate = dateJT.getDate();
           
                        //Δημιουργία νέου άλμπουμ
                        album=  new Album(0, newTitle, newDate, newType, 0, null, mg, mpc);
                               
                        //Αποθήκευση στοιχείων του άλμουμ στη ΒΔ
                        if (DB.DBmanager.SaveAlbum(album)){
                            //Πέρασμα του άλμπουμ στο συγκρότημα
                            if(DB.DBmanager.SaveAlbumMusicGroup(album, mg)){
                            //Αποθήκευση των τραγουδιών της λίστας στη ΒΔ
                                for(Song s: songList){
                                //Δημιουργία τραγουδιών με βάση το άλμπουμ
                                    song =new Song (0,s.getTitle(),s.getDuration(),s.getTracknr(), s.getDiskNumber(),album);
                                        if(DB.DBmanager.SaveSong(album,song)){
                                    }
                                }
                            }
                            JOptionPane.showMessageDialog(null,"Επιτυχής καταχώρηση τραγουδιών!","SUCCESFUL",JOptionPane.INFORMATION_MESSAGE);
                        
                            ListAlbumGroupForm.albumList.add(album);
                        
                            JOptionPane.showMessageDialog(null,"Επιτυχής καταχώρηση άλμπουμ!","SUCCESFUL",JOptionPane.INFORMATION_MESSAGE);
                        
                            //Null τιμές στο GUI για αποθήκευση νέου άλμπουμ
                            titleJT.setText("");
                            typeJT.setText("");
                            tralbumJT.setText("");
                            jComboBoxEtairia.setSelectedItem(null);
                            jComboBoxGroup.setSelectedItem(null);
                            dateJT.setDate(null);
                            songList.clear();
                        }else{
                            JOptionPane.showMessageDialog(null, "Σφάλμα επικοινωνίας με τη ΒΔ!", "ERROR", JOptionPane.ERROR_MESSAGE);
                        }
                    }
               }
            }
        }       
    }//GEN-LAST:event_saveActionPerformed

    private void songTableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_songTableMouseClicked
        // TODO add your handling code here:
        checkButtons();
    }//GEN-LAST:event_songTableMouseClicked

    private void formMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMouseClicked
        // TODO add your handling code here:
        selectRow=-1;
        delete.setEnabled(selectRow>=0);
    }//GEN-LAST:event_formMouseClicked

    private void tralbumJTKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_tralbumJTKeyTyped
        // TODO add your handling code here:
        char c= evt.getKeyChar();
        if(!(Character.isDigit(c) || (c==KeyEvent.VK_BACKSPACE) || (c==KeyEvent.VK_DELETE))){
            getToolkit().beep();
            evt.consume();
        }
    }//GEN-LAST:event_tralbumJTKeyTyped
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(NewOrModifyAlbumGroupForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(NewOrModifyAlbumGroupForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(NewOrModifyAlbumGroupForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(NewOrModifyAlbumGroupForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>
        //</editor-fold>
        //</editor-fold>
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewOrModifyAlbumGroupForm().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.persistence.EntityManager RadioStationPUEntityManager;
    private javax.swing.JButton add;
    private javax.swing.JButton cancel;
    private org.jdesktop.swingx.JXDatePicker dateJT;
    private javax.swing.JButton delete;
    private javax.swing.JComboBox jComboBoxEtairia;
    private javax.swing.JComboBox jComboBoxGroup;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JSeparator jSeparator1;
    private java.util.List<POJOS.MusicGroup> musicGroupList;
    private javax.persistence.Query musicGroupQuery;
    private java.util.List<POJOS.MusicProductionCompany> musicProductionCompanyList;
    private javax.persistence.Query musicProductionCompanyQuery;
    private javax.swing.JButton save;
    public static java.util.List<POJOS.Song> songList;
    public static javax.persistence.Query songQuery;
    public static javax.swing.JTable songTable;
    private javax.swing.JTextField titleJT;
    private javax.swing.JTextField tralbumJT;
    private javax.swing.JTextField typeJT;
    private org.jdesktop.beansbinding.BindingGroup bindingGroup;
    // End of variables declaration//GEN-END:variables
}
